package com.jrauto.CarAppBackend.controller;

/**
 * @author : huiMing
 * Date : 2025年06月26日 10:10
 * @version V1.0
 */

import com.jrauto.CarAppBackend.entity.Feedback;
import com.jrauto.CarAppBackend.service.FeedbackService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 反馈管理 RESTful API 控制器
 */
@Tag(name = "FeedbackController", description = "用户反馈管理") // Swagger/OpenAPI 标签
@RestController // 标记这是一个 RESTful 控制器
@RequestMapping("/feedback") // 统一的请求路径前缀
public class FeedbackController {

    @Resource // 注入 FeedbackService
    private FeedbackService feedbackService;

    /**
     * 新增反馈
     * POST /api/feedback
     * @param feedback 反馈实体对象 (从请求体中解析)
     * @return ResponseEntity 包含操作结果
     */
    @Operation(summary = "新增用户反馈", description = "提交一条新的用户反馈记录") // Swagger/OpenAPI 操作说明
    @PostMapping("/add")
    public ResponseEntity<String> addFeedback(@RequestBody Feedback feedback) {
        try {

            boolean success = feedbackService.addFeedback(feedback);
            if (success) {
                return ResponseEntity.status(HttpStatus.CREATED).body("反馈提交成功");
            } else {
                return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("反馈提交失败");
            }
        } catch (Exception e) {
            // 捕获异常并返回错误信息
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("服务器内部错误：" + e.getMessage());
        }
    }

    /**
     * 根据ID获取反馈详情
     * GET /api/feedback/{id}
     * @param id 反馈ID (从路径变量中获取)
     * @return ResponseEntity 包含反馈实体或错误信息
     */
    @Operation(summary = "根据ID获取反馈详情", description = "根据反馈ID查询单条反馈记录")
    @GetMapping("/{id}")
    public ResponseEntity<Feedback> getFeedbackById(@PathVariable Long id) {
        try {
            Feedback feedback = feedbackService.getFeedbackById(id);
            if (feedback != null) {
                return ResponseEntity.ok(feedback);
            } else {
                return ResponseEntity.status(HttpStatus.NOT_FOUND).body(null); // 反馈不存在
            }
        } catch (Exception e) {
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null); // 服务器内部错误
        }
    }

    /**
     * 获取所有反馈列表
     * GET /api/feedback
     * @return ResponseEntity 包含反馈列表或错误信息
     */
    @Operation(summary = "获取所有反馈列表", description = "查询所有用户反馈记录")
    @GetMapping("getAll")
    public ResponseEntity<List<Feedback>> getAllFeedbacks() {
        try {
            List<Feedback> feedbacks = feedbackService.getAllFeedbacks();
            return ResponseEntity.ok(feedbacks);
        } catch (Exception e) {
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null);
        }
    }

    /**
     * 根据状态获取反馈列表
     * GET /api/feedback/status/{status}
     * @param status 反馈状态 (0-待解决, 1-已解决)
     * @return ResponseEntity 包含反馈列表或错误信息
     */
    @Operation(summary = "根据状态获取反馈列表", description = "根据反馈状态（0:待解决, 1:已解决）查询反馈记录")
    @GetMapping("/getStatus/{status}")
    public ResponseEntity<List<Feedback>> getFeedbacksByStatus(@PathVariable Integer status) {
        try {
            List<Feedback> feedbacks = feedbackService.getFeedbacksByStatus(status);
            return ResponseEntity.ok(feedbacks);
        } catch (Exception e) {
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null);
        }
    }

    /**
     * 根据类型获取反馈列表
     * GET /api/feedback/type/{type}
     * @param type 反馈类型
     * @return ResponseEntity 包含反馈列表或错误信息
     */
    @Operation(summary = "根据类型获取反馈列表", description = "根据反馈类型查询反馈记录")
    @GetMapping("/getType/{type}")
    public ResponseEntity<List<Feedback>> getFeedbacksByType(@PathVariable String type) {
        try {
            List<Feedback> feedbacks = feedbackService.getFeedbacksByType(type);
            return ResponseEntity.ok(feedbacks);
        } catch (Exception e) {
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null);
        }
    }

    /**
     * 更新反馈记录
     * PUT /api/feedback/{id}
     * @param id 反馈ID (从路径变量中获取)
     * @param feedback 更新后的反馈实体 (从请求体中解析)
     * @return ResponseEntity 包含操作结果
     */
    @Operation(summary = "更新反馈记录", description = "更新指定ID的反馈记录，包括回复内容和状态")
    @PutMapping("/{id}")
    public ResponseEntity<String> updateFeedback(@PathVariable Long id, @RequestBody Feedback feedback) {
        try {
            // 确保URL中的ID和请求体中的ID一致（或者直接使用URL中的ID）
            feedback.setId(id);
            boolean success = feedbackService.updateFeedback(feedback);
            if (success) {
                return ResponseEntity.ok("反馈更新成功");
            } else {
                // 如果是更新失败，可能是ID不存在或数据校验问题
                return ResponseEntity.status(HttpStatus.NOT_FOUND).body("反馈更新失败，可能ID不存在或数据异常");
            }
        } catch (IllegalArgumentException e) {
            return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(e.getMessage());
        }
        catch (Exception e) {
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("服务器内部错误：" + e.getMessage());
        }
    }

    /**
     * 删除反馈记录
     * DELETE /api/feedback/{id}
     * @param id 反馈ID (从路径变量中获取)
     * @return ResponseEntity 包含操作结果
     */
    @Operation(summary = "删除反馈记录", description = "根据ID删除一条反馈记录")
    @DeleteMapping("/{id}")
    public ResponseEntity<String> deleteFeedback(@PathVariable Long id) {
        try {
            boolean success = feedbackService.deleteFeedback(id);
            if (success) {
                return ResponseEntity.ok("反馈删除成功");
            } else {
                return ResponseEntity.status(HttpStatus.NOT_FOUND).body("反馈删除失败，反馈不存在");
            }
        } catch (Exception e) {
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("服务器内部错误：" + e.getMessage());
        }
    }
}
